package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.common.result.PageResult;
import com.itheima.mapper.CheckgroupCheckitemMapper;
import com.itheima.pojo.CheckItem;
import com.itheima.pojo.dto.CheckitemDTO;
import com.itheima.pojo.dto.CheckitemPageQueryDTO;
import com.itheima.pojo.vo.CheckitemVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.itheima.mapper.CheckitemMapper;
import com.itheima.service.CheckitemService;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 检查项Service业务层处理
 * 
 * @author hjc
 * @date 2025-01-11
 */
@Service
public class CheckitemServiceImpl implements CheckitemService
{
    @Autowired
    private CheckitemMapper checkitemMapper;

    @Autowired
    private CheckgroupCheckitemMapper checkgroupCheckitemMapper;

    /**
     * 检查项分页查询
     * @param checkitemPageQueryDTO
     * @return
     */
    @Override
    public PageResult pageQuery(CheckitemPageQueryDTO checkitemPageQueryDTO) {
        PageHelper.startPage(checkitemPageQueryDTO.getCurrentPage(),checkitemPageQueryDTO.getPageSize());
        //判断前端传来的是编号还是名字，再set进dto里对应的code或name
        if(checkitemPageQueryDTO.getQueryString() != null && checkitemPageQueryDTO.getQueryString().contains("0")){
            checkitemPageQueryDTO.setCode(checkitemPageQueryDTO.getQueryString());
        }else{
            checkitemPageQueryDTO.setName(checkitemPageQueryDTO.getQueryString());
        }

        Page<CheckitemVO> page = checkitemMapper.pageQuery(checkitemPageQueryDTO);
        return new PageResult(page.getTotal(),page.getResult());
    }

    /**
     * 新增检查项
     * @param checkitemDTO
     */
    @Override
    public void save(CheckitemDTO checkitemDTO) {
        checkitemMapper.insertCheckitem(checkitemDTO);
    }
    /**
     * 删除检查项
     *
     * @param id 需要删除的检查项主键
     */

    @Transactional
    @Override
    public void delete(Long id) {
        try {
            // 先删除 t_checkgroup_checkitem 表中相关的记录
            checkgroupCheckitemMapper.deleteByCheckitemId(id);
            // 再删除 t_checkitem 表中的记录
            checkitemMapper.deleteCheckitemById(id);
        } catch (Exception e) {
            // 处理异常，回滚事务
            throw new RuntimeException("删除检查项失败", e);
        }
    }


    @Override
    public CheckitemDTO getById(Long id) {
        CheckitemDTO checkitemDTO = checkitemMapper.getById(id);
        return checkitemDTO;
    }

    /**
     * 修改检查项
     *
     * @param checkitemDTO 检查项信息
     */
    @Override
    public void update(CheckitemDTO checkitemDTO) {
        checkitemMapper.update(checkitemDTO);
    }

    /**
     * 查询所有检查项
     * @return
     */
    @Override
    public List<CheckItem> findAll() {
        return checkitemMapper.getAll();
    }

    @Override
    public List<Long> getCheckItemIdsByCheckGroupId(Long checkgroupId) {
        return checkitemMapper.getCheckItemIdsByCheckGroupId(checkgroupId);
    }
}
